﻿//二叉树的反转
//bool isSymmetric(struct TreeNode* root){
//    if (!root) {
//        return 0;
//    }
//    struct TreeNode* LeftNode = isSymmetric(root->left);
//    struct TreeNode* RightNode = isSymmetric(root->right);
//    root->right = LeftNode;
//    root->left = RightNode;
//    return root;
//}

//判断两个二叉树是否相同
//bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
//	if ((!p && q) || (p && !q)) {
//		return false;
//	}
//	if (!p && !q) {
//		return true;
//	}
//	if (p->val != q->val) {
//		return false;
//	}
//	return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
//}

//判断两个二叉树是否相等
//typedef struct TreeNode Leaf;、
//bool Judge(Leaf* root1, Leaf* root2) {//功能递归结构
//    if (!root1 && !root2) {
//        return true;
//    }
//    if ((!root1 && root2) || (root1 && !root2)) {
//        return false;
//    }
//    if (root1->val != root2->val) {
//        return 0;
//    }
//    return Judge(root1->left, root2->right) && Judge(root1->right, root2->left);
//}
//bool isSymmetric(struct TreeNode* root) {
//    if (!root) {
//        return true;
//    }
//    else {
// //当指定程序不满足时，可以在程序外面在设置一个递归程序来进行判断
//        return Judge(root->left, root->right);
//    }
//}

//int i = 0;
//void Fround(struct TreeNode* root, struct TreeNode* subRoot) {
//    if (!root) {
//        return;
//    }
//    if (root->val == subRoot->val) {
//        i = 1;
//        return;
//    }
//    if (!i) {
//        Frond(root->left, subRoot);
//    }
//    if (!i) {
//        Frond(root->right, subRoot);
//    }
//}
//bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {
//    if (!root && !subRoot) {
//        return true;
//    }
//    if ((!root && subRoot) || (root && !subRoot)) {
//        return false;
//    }
//    if (!i) {
//        Fround(root, subRoot);
//    }
//    if (root->val == subRoot->val) {
//        i = 1;
//        return isSubtree(root->left, subRoot->left) && isSubtree(root->right, subRoot->right);
//    }
//    return false;
//}

//另一颗树的子树（查找一棵树是否包含另一颗树，结构也要相等）
//bool Judge(struct TreeNode* root, struct TreeNode* subRoot) {
//    if (!root && !subRoot) {
//        return true;
//    }
//    if (!root || !subRoot || root->val != subRoot->val) {
//        return false;
//    }
//    return Judge(root->left, subRoot->left) && Judge(root->right, subRoot->right);
//}
//bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {
//    if (!subRoot) {
//        return true;
//    }
//    if (!root) {
//        return false;
//    }
//    //root用前序遍历，保持子树不变
//    return Judge(root, subRoot) || isSubtree(root->left, subRoot) || isSubtree(root->right, subRoot);
//}

//二叉树的前序遍历
//static int x = 0;
//int Adjust(struct TreeNode* root, int* nums) {
//    fprintf(stdout, "x = %d\n", x);
//    if (!root) {
//        return x;
//    }
//    nums[x++] = root->val;
//    int left = Adjust(root->left, nums);
//    int right = Adjust(root->right, nums);
//    return left > right ? left : right;
//}
//int* preorderTraversal(struct TreeNode* root, int* returnSize) {
//    x = 0;
//    int* nums = (int*)malloc(sizeof(int) * 100);
//    memset(nums, 0, sizeof(int) * 100);
//    *returnSize = Adjust(root, nums);
//    return nums;
//}

//二叉树中序遍历
//int x = 0;
//int Adjust(struct TreeNode* root, int* nums) {
//    if (!root) {
//        return x;
//    }
//    int n1 = Adjust(root->left, nums);
//    nums[x++] = root->val;
//    int n2 = Adjust(root->right, nums);
//    return n1 > n2 ? n1 : n2;
//}
//int* inorderTraversal(struct TreeNode* root, int* returnSize) {
//    x = 0;
//    int* nums = (int*)malloc(sizeof(int) * 100);
//    *returnSize = Adjust(root, nums);
//    return nums;
//}

//二叉树的后序遍历
//int x = 0;
//int Adjust(struct TreeNode* root, int* nums) {
//    if (!root) {
//        return x;
//    }
//    int left = Adjust(root->left, nums);
//    int right = Adjust(root->right, nums);
//    nums[x++] = root->val;
//    return x;
//}
//int* postorderTraversal(struct TreeNode* root, int* returnSize) {
//    x = 0;
//    int* nums = (int*)malloc(sizeof(int) * 100);
//    *returnSize = Adjust(root, nums);
//    return nums;
//}